#pragma once
template <typename T> class Singleton {

protected:
  Singleton<T>(){};

public:
  Singleton<T>(const Singleton<T> &) = delete;
  Singleton<T> &operator=(const Singleton<T> &) = delete;
  static T *GetInstance() {
    static T *_instance = new T;
    return _instance;
  }
  ~Singleton<T>() {}
};